/**
 * 
 */

package com.gustozzi.distribucion.action;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ServletRequestAware;

import com.gustozzi.distribucion.action.util.Constantes;
import com.gustozzi.distribucion.negocio.CobranzaBO;
import com.gustozzi.distribucion.negocio.impl.CobranzaBOImpl;
import com.gustozzi.domain.OrdenCobranza;
import com.opensymphony.xwork2.ActionSupport;

/**
 * @author FABRIZIO
 * 
 */
public class OrdenAction extends ActionSupport implements ServletRequestAware
{

    private static final long serialVersionUID = 1L;
    CobranzaBO cobranzaBO = new CobranzaBOImpl();
    private String botonSeleccionado;
    private OrdenCobranza ordenCobranza;
    private HttpServletRequest request;
    private List<OrdenCobranza> listaOrdenes;
    private ArrayList<String> listaSeleccionados;
    private String codigoSeleccionado;

    public String execute()
    {
        String destino = Constantes.CADENA_VACIA;
        if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_FILTRAR))
        {
            destino = obtenerListaOrdenes();
        }
        else if (botonSeleccionado.equalsIgnoreCase(Constantes.BTN_ACEPTAR))
        {
            destino = asignarOrden();
        }
        else
        {
            destino = Constantes.ERROR;
        }
        return destino;
    }

    public String obtenerListaOrdenes()
    {
        String destino = Constantes.CADENA_VACIA;
        List<OrdenCobranza> listaOrdenes = null;
        try
        {
            String numero = ordenCobranza.getCodigo();
            String numeroRuc = ordenCobranza.getCliente().getRuc();

            listaOrdenes = cobranzaBO.obtenerListaOrdenesCobranza(numero, numeroRuc, Constantes.CADENA_VACIA,
                    Constantes.CADENA_VACIA);
            request.getSession().setAttribute("listaOrdenesCompletaSession", listaOrdenes);
            this.setListaOrdenes(listaOrdenes);
            destino = Constantes.CONSULTARORDEN;
        }
        catch (Exception e)
        {
            destino = "ERROR";
        }
        return destino;
    }

    @SuppressWarnings("unchecked")
    public String asignarOrden()
    {
        String destino = "";
        List<OrdenCobranza> listaOrdenesSeleccionadas = null;
        boolean indicadorCoincidencia = false;
        try
        {
            if (listaSeleccionados != null)
            {
                List<String> lista = listaSeleccionados;
                List<OrdenCobranza> listaOrdenesSession = (ArrayList<OrdenCobranza>) request.getSession().getAttribute(
                        "listaOrdenesCompletaSession");
                listaOrdenesSeleccionadas = new ArrayList<OrdenCobranza>();
                for (int i = 0; i < listaOrdenesSession.size(); i++)
                {
                    OrdenCobranza orden = listaOrdenesSession.get(i);
                    for (int j = 0; j < lista.size(); j++)
                    {
                        if (orden.getCodigo().equalsIgnoreCase(lista.get(j)))
                        {
                            listaOrdenesSeleccionadas.add(orden);
                        }
                    }
                }
                if (request.getSession().getAttribute("listaOrdenesSession") != null)
                {
                    List<OrdenCobranza> listaPrevia = (ArrayList<OrdenCobranza>) request.getSession().getAttribute(
                            "listaOrdenesSession");
                    for (int k = 0; k < listaPrevia.size(); k++)
                    {
                        OrdenCobranza ordenPrevia = listaPrevia.get(k);
                        indicadorCoincidencia = false;
                        for (int m = 0; m < listaOrdenesSeleccionadas.size(); m++)
                        {
                            OrdenCobranza ordenNueva = listaOrdenesSeleccionadas.get(m);
                            if (ordenPrevia.getCodigo().equalsIgnoreCase(ordenNueva.getCodigo()))
                            {
                                indicadorCoincidencia = true;
                            }
                        }
                        if (!indicadorCoincidencia)
                        {
                            listaOrdenesSeleccionadas.add(listaPrevia.get(k));
                        }
                    }
                }

                setListaOrdenes(listaOrdenesSeleccionadas);
                request.getSession().removeAttribute("listaOrdenesCompletaSession");
                request.getSession().setAttribute("listaOrdenesSession", listaOrdenesSeleccionadas);
            }
            destino = Constantes.ORDENASIGNADA;
        }
        catch (Exception e)
        {
            destino = Constantes.ERROR;
        }
        return destino;
    }

    /**
     * @param botonSeleccionado
     *            the botonSeleccionado to set
     */
    public void setBotonSeleccionado(String botonSeleccionado)
    {
        this.botonSeleccionado = botonSeleccionado;
    }

    @Override
    public void setServletRequest(HttpServletRequest request)
    {
        this.request = request;
    }

    /**
     * @return the listaSeleccionados
     */
    public ArrayList<String> getListaSeleccionados()
    {
        return listaSeleccionados;
    }

    /**
     * @param listaSeleccionados
     *            the listaSeleccionados to set
     */
    public void setListaSeleccionados(ArrayList<String> listaSeleccionados)
    {
        this.listaSeleccionados = listaSeleccionados;
    }

    /**
     * @return the botonSeleccionado
     */
    public String getBotonSeleccionado()
    {
        return botonSeleccionado;
    }

    /**
     * @return the ordenCobranza
     */
    public OrdenCobranza getOrdenCobranza()
    {
        return ordenCobranza;
    }

    /**
     * @return the listaOrdenes
     */
    public List<OrdenCobranza> getListaOrdenes()
    {
        return listaOrdenes;
    }

    /**
     * @param ordenCobranza
     *            the ordenCobranza to set
     */
    public void setOrdenCobranza(OrdenCobranza ordenCobranza)
    {
        this.ordenCobranza = ordenCobranza;
    }

    /**
     * @param listaOrdenes
     *            the listaOrdenes to set
     */
    public void setListaOrdenes(List<OrdenCobranza> listaOrdenes)
    {
        this.listaOrdenes = listaOrdenes;
    }

    /**
     * @return the codigoSeleccionado
     */
    public String getCodigoSeleccionado()
    {
        return codigoSeleccionado;
    }

    /**
     * @param codigoSeleccionado
     *            the codigoSeleccionado to set
     */
    public void setCodigoSeleccionado(String codigoSeleccionado)
    {
        this.codigoSeleccionado = codigoSeleccionado;
    }
}